package com.ruoyi.tools.wechat;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.tools.pay.domain.WxPayBean;
import com.ruoyi.tools.util.http.HttpRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log;

//openId工具
@Component
public class OpenIdTools {

    @Autowired
    WxPayBean wxPayBean;

    /**
     * 获取openId
     * @param code jscode
     * @return openId 和 session_key
     */
    public Map getOpenId(String code) {
        System.out.println(code);
        Map map = new HashMap();
        //登录凭证不能为空
        if (code == null || code.length() == 0) {
            map.put("status", 0);
            map.put("msg", "code 不能为空");
            return map;
        }
        //小程序唯一标识   (在微信小程序管理后台获取)

        String wxspAppid = wxPayBean.getAppId();
        //小程序的 app secret (在微信小程序管理后台获取)
        String wxspSecret = wxPayBean.getAppSecret();
        //授权（必填）
        String grant_type = wxPayBean.getAuthorization_code();//

        log.info("appid=" + wxspAppid);
        log.info("appSecret=" + wxspSecret);
        log.info("grant_type=" + grant_type);

        //https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
        //1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid
        //请求参数
        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;
        //发送请求
        String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);
        System.out.println("sr========"+sr);
        //解析相应内容（转换成json对象）
        JSONObject json = JSON.parseObject(sr);
        System.out.println("json============"+json);
        //获取会话密钥（session_key）json.get("session_key").toString();
        String session_key = json.get("session_key").toString();
        //用户的唯一标识（openid）
        String openid = (String) json.get("openid");
        map.put("session_key",session_key);
        map.put("openid",openid);
        return map;
    }

}
